package com.dds.system.service.union.impl;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSON;
import com.dds.system.domain.search.union.UnionProductSearch;
import com.dds.system.domain.union.UnionProductJournal;
import com.dds.system.domain.union.UnionProductOrder;
import com.dds.system.mapper.union.UnionProductJournalMapper;
import com.dds.system.mapper.union.UnionProductOrderMapper;
import com.dds.system.service.app.impl.AppUserScoreInfoServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.dds.system.mapper.union.UnionProductMapper;
import com.dds.system.domain.union.UnionProduct;
import com.dds.system.service.union.IUnionProductService;

/**
 * 联盟商家积分商品Service业务层处理
 * 
 * @author gaolianjie
 * @date 2021-04-30
 */
@Service
public class UnionProductServiceImpl implements IUnionProductService 
{
    @Autowired
    private UnionProductMapper unionProductMapper;

    @Autowired
    private UnionProductOrderMapper unionProductOrderMapper;

    @Autowired
    private AppUserScoreInfoServiceImpl appUserScoreInfoService;

    @Autowired
    private UnionProductJournalMapper unionProductJournalMapper;

    /**
     * 查询联盟商家积分商品
     * 
     * @param prodId 联盟商家积分商品ID
     * @return 联盟商家积分商品
     */
    @Override
    public UnionProduct selectUnionProductById(Integer prodId)
    {
        return unionProductMapper.selectUnionProductById(prodId);
    }

    /**
     * 查询联盟商家积分商品列表
     * 
     * @param unionProduct 联盟商家积分商品
     * @return 联盟商家积分商品
     */
    @Override
    public List<Map<String, Object>> selectUnionProductList(UnionProductSearch unionProduct)
    {
        return unionProductMapper.selectUnionProductList(unionProduct);
    }

    /**
     * 新增联盟商家积分商品
     * 
     * @param unionProduct 联盟商家积分商品
     * @return 结果
     */
    @Override
    public int insertUnionProduct(UnionProduct unionProduct)
    {
        return unionProductMapper.insertUnionProduct(unionProduct);
    }

    /**
     * 修改联盟商家积分商品
     * 
     * @param unionProduct 联盟商家积分商品
     * @return 结果
     */
    @Override
    public int updateUnionProduct(UnionProduct unionProduct)
    {
        return unionProductMapper.updateUnionProduct(unionProduct);
    }

    /**
     * 批量删除联盟商家积分商品
     * 
     * @param prodIds 需要删除的联盟商家积分商品ID
     * @return 结果
     */
    @Override
    public int deleteUnionProductByIds(Integer[] prodIds)
    {
        return unionProductMapper.deleteUnionProductByIds(prodIds);
    }

    /**
     * 删除联盟商家积分商品信息
     * 
     * @param prodId 联盟商家积分商品ID
     * @return 结果
     */
    @Override
    public int deleteUnionProductById(Integer prodId)
    {
        return unionProductMapper.deleteUnionProductById(prodId);
    }

    /**
     * 修改积分商品状态
     * @param params 参数
     * @param userId 操作用户
     * @return 结果
     */
    @Override
    public boolean changeUnionProduct(Map<String, Object> params, Long userId) {
        int prodId = Integer.parseInt(params.get("prodId").toString());
        String valid = params.get("valid").toString();

        // 下架积分商品
        if (valid.equals("0")) {
            // 将所有未兑换的积分商品归还用户积分
            List<UnionProductOrder> unionProductOrders = unionProductOrderMapper.selectUnionProductOrderByProdId(prodId);

            for (UnionProductOrder order : unionProductOrders) {
                // 获取用户积分并归还
                appUserScoreInfoService.changeScore(order.getUserId(), order.getScoreAmount(), "积分商品下架，积分增加", "1");

                // 积分商品订单下架
                order.setExchangeStatus("2");
                unionProductOrderMapper.updateUnionProductOrder(order);
            }
        }

        // 修改积分商品
        UnionProduct unionProduct = unionProductMapper.selectUnionProductById(prodId);

        unionProduct.setIsValid(valid);
        unionProduct.setUpdatedUser(userId);
        unionProduct.setUpdatedTime(new Date());
        unionProductMapper.updateUnionProduct(unionProduct);

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        List<String> lstExamine = new ArrayList<>();
        lstExamine.add(UnionProduct.validText(valid));
        lstExamine.add("修改时间 => " + simpleDateFormat.format(unionProduct.getUpdatedTime()));

        // 增加积分商品日志
        UnionProductJournal unionProductJournal = UnionProductJournal.of()
                .setProdId(prodId)
                .setCreatedAt(new Date())
                .setUserId(userId)
                .setStatus(JSON.toJSONString(lstExamine));
        unionProductJournalMapper.insertUnionProductJournal(unionProductJournal);

        return true;
    }
}
